package main

import (
	"baseLearning/base1/version"
	"fmt"
	// 	"rsc.io/quote"
)

var allPara = 10

/*
双引号表示一个字符串，双引号内字符可以转义，比如：\n，\r
单引号只能用来包裹一个字节的ASCII码字符，比如：var a int = '中'
反引号引起来的字符串就不支持转义
*/

func main1() {
	fmt.Println("hello world")
	// fmt.Println(quote.Go())
	//go的字符串只能使用双引号，所以想在字符串中显示单引号，那么就得使用转义字符
	fmt.Println("\"hello world\"")
	//go支持反引号 反引号引起来的字符串就不支持转义
	fmt.Println(`"Hello World"`)

	// 只声明，不赋值，默认是0
	var v0 int

	// 先声明
	var v1 int
	v1 = 1

	// 声明的同时赋值
	var v2 int = 2

	// 自动推断
	var v3 = 3

	// 声明赋值
	v4 := 4

	fmt.Printf("v0=%v, v1=%v, v2=%v, v3=%v, v4=%v\n", v0, v1, v2, v3, v4)

	var (
		v5 int
		v6 int = 2
		v7     = 3
	)

	fmt.Printf("v1=%v, v2=%v, v3=%v", v5, v6, v7)
	fmt.Println("")
	const a int = 1
	fmt.Println(a)

	/*

			批量声明常量就可以使用iota

		它可以实现常量的计数功能

		iota就是当前变量的层数

			**/

	const (
		a1 int = iota
		b      = 2
		c      = iota
		d      = iota
		e      = 1
		f      = iota
	)
	fmt.Println(a1, b, c, d, e, f)
	// 0 2 2 3 1 5
	const (
		g = iota
		h = iota
	)
	fmt.Println(g, h)
	// 0 1
	//全局变量
	fmt.Println(allPara)
	//跨包变量 如果要使用跨包变量，则需要将该变量名首字母大写
	fmt.Println(version.Version)

	f1 := 2.45
	var f2 float32 = 2.34
	fmt.Printf("f1 %v, %T\n", f1, f1)
	fmt.Printf("f2 %v, %T\n", f2, f2)

	const (
		c1 byte = 65
		c2      = 'a'
		c3 rune = '中'
	)

	fmt.Printf("c1 的码值=%v, 字符为：%c, 类型是%T\n", c1, c1, c1)
	fmt.Printf("c2 的码值=%v, 字符为：%c, 类型是%T\n", c2, c2, c2)
	fmt.Printf("c3 的码值=%v, 字符为：%c, 类型是%T\n", c3, c3, c3)

}
